iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
Software Development

後端PHP+Laravel--新手實戰日記系列 第 5

Day05-靜態(static)和self_PHP物件導向Part3

  • 分享至 

  • xImage
  •  

範圍解析運算子

範圍解析運算子(Scope Resolution Operator)以兩個冒號::呈現。
至於為何用(::)來表示,根據官方文件說明,這個詞在希伯來文就是雙冒號的意思

(原來如此)。

靜態(static)

為了區分物件和類的訪問,static關鍵字修飾屬性和方法,可以在未進行實體化時使用靜態屬性/方法

類::static屬性名;
類::static方法名();

聲明類屬性或方法為靜態

class Wallet{
    //屬性
    private static $count =0;
    //方法
    public static function showClass(){
        echo Wallet::$count;
    }
}

1.類可以直接訪問靜態方法(無須實例化的過程)

Wallet::showClass();  

//輸出 0

2.靜態屬性不能通過一個已實例化的物件來訪問(但靜態方法可以)

$s = new Wallet();
$s->count = 100 ;  

//報錯:PHP Notice:  Accessing static property Wallet::$count as non static

3.修改原本的code,在靜態方法內部定義$this

    public static function showClass(){
        echo Wallet::$count;
        $this->charge=10;
        }
        
    //vscode提醒$this can not be used in static methods
        

由於靜態方法本質是給類訪問,所以不允許在靜態方法內部定義$this物件

另外,在PHP7特別加註了警告,未來將可能移除靜態方式訪問靜態方法。

In PHP 7, calling non-static methods statically is deprecated, and will generate an E_DEPRECATED warning. Support for calling non-static methods statically may be removed in the future.

self

self專門使用於類內部的方法,代替類名的寫法加上::,用戶方便修改類名時使用

class Wallet{
    //屬性
    private static $count =0;
    //方法
    public static function showClass(){
        echo Wallet::$count;
        echo self::$count;  //代替類名
    }
}

Wallet::showClass();

//輸出

00

不妨參考PHP官方文件https://www.php.net/manual/en/language.oop5.static.php
今天的static與self的講解先說到這邊~~


上一篇
Day04-$this與可見度_PHP物件導向Part2
下一篇
Day06-封裝/繼承/多型_PHP物件導向Part4
系列文
後端PHP+Laravel--新手實戰日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言